# 需求: 使用for循环,快速打印矩形
"""
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
"""

# 第一步: 输出一行 * (使用循环)
for i in range(5):
    print('*', end=' ')

print('\n-------------------')

# 第二步: 输出5行*
# 内外层循环次数,与i值无关时,可以内外层循环都使用同名变量,但是不建议,因为可读性极差.
# for i in range(5):
#     for i in range(5):
#         print('*', end=' ')
#     print()

for j in range(5):
    for i in range(5):
        print('*', end=' ')
    print()

'''
循环结束逻辑:
while循环根据循环条件判断是否循环结束
    while循环一般用循环变量来控制循环结束条件
for循环是根据容器内的元素个数决定是否循环结束
    for循环中不需要循环变量
    
循环使用场景:
while循环一般构造有特定结束条件的循环或者死循环
for循环一般只对于容器类型遍历时使用

注意:在开发中一般情况下while 和for 可以相互转换,但是for循环使用场景比while要广一些
'''

# 练习:
# 使用循环嵌套,打印如下直角三角形
'''
* 
* *  
* * *  
* * * *  
* * * * * 
'''
# 分析1: 第一行打印1个*  第二行打印2个* 以此类推,我们得出结论, * 的个数就是行数
# 分析2: 如果想要打印一列数据, 则让循环变量i从0开始, 使用 range(n)作为被遍历的容器, 想要打印几列,就让range中的n 为几即可 几即可
# 在for循环中, 外层循环range中的数据控制行数, 内层循环range中的数据控制列数
# for j in range(3):
#     for i in range(8):
#         print('*', end=' ')
#     print()
# 分析3: 当前数据的行数,就等于j+1(因为range从0开始), 如果想让打印与行数相同的列,则使用range(j + 1)行数即可

for j in range(5): # [0,1,2,3,4]
    for i in range(j + 1):
        print('*', end=' ')
    print()
